﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;

// 学生类
public class Student
{
    public string StudentId { get; set; }     // 学号
    public string Name { get; set; }          // 姓名
    public int Age { get; set; }              // 年龄

    public Student(string studentId, string name, int age)
    {
        StudentId = studentId;
        Name = name;
        Age = age;
    }

    public Student() { } // 无参构造函数用于反序列化

    public override string ToString()
    {
        return $"学号：{StudentId}，姓名：{Name}，年龄：{Age}";
    }
}

// JSON功能类
public class JsonFileManager
{
    // 1. 使用JSON序列化学生集合并保存到文件
    public void SaveStudentsToFile(List<Student> students, string filePath)
    {
        try
        {
            string jsonString = JsonSerializer.Serialize(students, new JsonSerializerOptions
            {
                WriteIndented = true // 使JSON格式更易读
            });

            File.WriteAllText(filePath, jsonString);
            Console.WriteLine($"成功将学生数据保存到文件：{filePath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"保存文件时出错：{ex.Message}");
        }
    }

    // 2. 使用反序列化读取文件内容
    public List<Student> LoadStudentsFromFile(string filePath)
    {
        try
        {
            if (!File.Exists(filePath))
            {
                Console.WriteLine($"文件不存在：{filePath}");
                return new List<Student>();
            }

            string jsonString = File.ReadAllText(filePath);
            List<Student> students = JsonSerializer.Deserialize<List<Student>>(jsonString);

            Console.WriteLine($"成功从文件加载学生数据，共{students.Count}条记录");
            return students;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件时出错：{ex.Message}");
            return new List<Student>();
        }
    }

    // 遍历显示学生列表
    public void DisplayStudents(List<Student> students)
    {
        if (students == null || students.Count == 0)
        {
            Console.WriteLine("没有学生数据可显示");
            return;
        }

        Console.WriteLine("\n=== 学生列表 ===");
        foreach (var student in students)
        {
            Console.WriteLine(student);
        }
    }
}

// 测试类
class Program
{
    static void Main(string[] args)
    {
        // 创建测试数据
        List<Student> students = new List<Student>
        {
            new Student("001", "张三", 20),
            new Student("002", "李四", 21),
            new Student("003", "王五", 19)
        };

        JsonFileManager fileManager = new JsonFileManager();
        string filePath = "students.json";

        Console.WriteLine("=== JSON序列化测试 ===");

        // 显示原始数据
        Console.WriteLine("\n1. 原始学生数据：");
        fileManager.DisplayStudents(students);

        // 测试序列化保存到文件
        Console.WriteLine("\n2. 测试序列化保存到文件");
        fileManager.SaveStudentsToFile(students, filePath);

        // 测试反序列化从文件读取
        Console.WriteLine("\n3. 测试反序列化从文件读取");
        List<Student> loadedStudents = fileManager.LoadStudentsFromFile(filePath);

        // 显示从文件加载的数据
        Console.WriteLine("\n4. 从文件加载的学生数据：");
        fileManager.DisplayStudents(loadedStudents);

        Console.WriteLine("\n=== 测试完成 ===");

        // 显示文件内容（可选）
        Console.WriteLine($"\nJSON文件内容预览：");
        if (File.Exists(filePath))
        {
            string fileContent = File.ReadAllText(filePath);
            Console.WriteLine(fileContent);
        }

        Console.ReadKey();
    }
}